<?php
require_once 'BaseController.php';
/**
 * 地図検索
 *
 * @package apamanshop
 * @author suzuki-h@systemsoft.co.jp
 * @copyright コピーライト(要確認)
 */
class Search_ChizusearchController extends Search_BaseController
{
    // ページャ設定
	private	$pagerSetting = array(
						 'pages'=> 5						// 最低何ページ分、リンクを表示するか
						,'dispCount' => '20,40,60'		// 表示件数セレクトBOXの設定（カンマ区切りで複数指定可
						,'defaltDispCount' => 5			// デフォルト値（一覧表示件数）
						,'backPage' => 2				// 何ページ分、戻るリンクを表示するか
						,'movePage' => 3				// 何ページ分、進めるリンクを表示するか
						,'maxDispCount' => 500 );		// 最大何件目まで表示するか

   	/**
	* 地図検索の初期アクション
	*
	* 1. パラメータの取得
	* 2. 都道府県選択ブロックの生成
	* 3. 表示
	*
	* @access public
	* @return void
	*/
	public function indexAction()
	{
		$this->setMainTemplate('cms_search.tpl');
		/*
		 * 基本情報設定
		 */

		if (Apm_Config_Search::RENEW_2012 && !$this->_params['shoppage'] && empty($this->_params['obiType'])) {
			$disp_tpl = APPLICATION_PATH . '/modules/search/views/scripts/search_new.tpl';
			$this->_newTemplate = true;
			$this->_import_seo_search = true;
			// テンプレート変更
			$this->_todohuken_radio_helper  = $this->getApmHelper('seltodohuken_radio_new.tpl');
			$this->_sikucyoson_chizu_helper = $this->getApmHelper('selsikucyoson_chizu_new.tpl');
			$this->_chizu_helper            = $this->getApmHelper('chizu_new.tpl');
			// JavaScript
			$this->addMetaJs('/common_new/js/import.js');
			// CSS
			$this->addMetaCss('/common_new/css/sub02.css',array('type' => 'text/css','media' => 'all'));
		} else {
			//CSSの定義（デザイン）
			$this->addMetaCss('/css/search/jquery-ui-1.7.1.custom.css',array('type' => 'text/css'));
			$this->addMetaCss('/css/search/ui.slider.extras.css',array('type' => 'text/css'));
			$this->addMetaCss('/css/search/search.css',array('type' => 'text/css','media' => 'all'));
			$this->addMetaCss('/css/search/searchlist.css',array('type' => 'text/css','media' => 'all'));
			$this->addMetaCss('/css/search/searchmap.css',array('type' => 'text/css','media' => 'all'));
			$this->addMetaCss('/css/shop/shop.css',array('type' => 'text/css','media' => 'all'));
			//JavaSriptの定義（デザイン）
			$this->addMetaJs('/js/search/jquery-ui-1.7.1.custom.min.js',array('charset' => 'utf-8'));
			$this->addMetaJs('/js/search/selectToUISlider.jQuery.js',array('charset' => 'utf-8'));
			$this->addMetaJs('/js/search/list.js');
			//JavaSriptの定義（アプリ）
			$this->addMetaJs('/app/js/search/Chizusearch.js');
		}
		// グローバルナビから遷移してきた場合
		if ($this->isGlobalNavi())
		{
//			Apm_Util_GlobalNavi_Common::transitionJudge(Apm_Config_Search::SRHKBN_CHIZU);
			$this->_params = Apm_Util_GlobalNavi_Common::transitionJudge(Apm_Config_Search::SRHKBN_CHIZU);
			// パラメータの補足
			Apm_Bukkenurl::convertSearchParam($this->_params);
			// canonical
			$this->addMetaCanonical($this->_baseurl . 'search/chizusearch/');
		}

		// 検索区分
		$this->setSearchKbn(Apm_Config_Search::SRHKBN_CHIZU, "chizusearch");

		//加盟店ページより遷移時はヘッダを付与する		/* 2011/07/22　AKBｷｬﾝﾍﾟｰﾝ：加盟店ﾒﾝﾊﾞｰｻｲﾄ追加対応 */
		if($this->_params['shoppage']){
			// 外部モデル呼び出し設定
			$loader = new Zend_Application_Module_Autoloader(array(
				'namespace' => 'Shop',
				'basePath' => APPLICATION_PATH . '/modules/shop',
			));
			$this->_model_shop = new Shop_Model_Detail();
			// 店舗詳細情報取得
			$shopDtlList = $this->_model_shop->getList($this->_params);
			// 表示用に変換
			$this->_data['shopDtl'] = $this->_model_shop->convertData($shopDtlList[0]);
	    	// Block設定
	        $this->_data['shoppage_header_block']   = $this->_shoppage_header_helper->getBlock($this->_data);
	        $this->_data['shoppage_footer_block']   = $this->_shoppage_footer_helper->getBlock($this->_data);
			// パンくずを生成しない
			$this->_noMakeBreadcrumb = true;
		}		
		//以下、検索画面によって条件分けする。
        //都道府県検索画面の出力(初期呼び出し時)
		if (! $this->_model_common->checkvalue($this->_params, "PrefCd") && !$this->_model_common->checkvalue($this->_params, "OemCd"))
    	{
    		if ($this->_newTemplate) {
				$this->_data['block_title'] = '*地図から賃貸情報を探す';
				// 人気のエリアtpl読み込み
				$pop_tpl = $this->getApmHelper(APPLICATION_PATH . '/modules/common/views/helpers/pop_area.tpl');
				$this->_data['pop_area_block'] = $pop_tpl->getBlock("");
			} else {
				// H1のタイトル
				$this->_data['h1_title'] = 'ご希望の都道府県を選択してください。';
				// JavaScript
				$this->addMetaJs('/app/js/search/Seltodohuken.js');
			}

			$this->_main_helper = $this->_todohuken_radio_helper;

		// 市区町村選択
    	}else if( (! $this->_model_common->checkvalue($this->_params, "x") && (!array_key_exists("obiType",$this->_params)))){
    		$this->_model = new Search_Model_Selchizutodofuken();

			if ($this->_newTemplate) {
				$this->_data['block_title'] = '*ご希望の市区町村をクリックしてください';
				//$this->addMetaCss('/css/search/search.css',array('type' => 'text/css','media' => 'all'));
			} else {
				// H1のタイトル
				$this->_data['h1_title'] = 'ご希望の市区町村をクリックしてください。';
				// JavaScript
				$this->addMetaJs('/app/js/search/Selsikucyoson.js');
			}

    		// 地図画像データの生成
			$this->_data['chizuGazo'] = $this->_model->getChizuGazoData($this->_params);

			// 市区町村マップ値データの生成
			$this->_data['sikucyoson'] = $this->_model->getSikucyosonData($this->_params);

			// 都道府県マップ値データの生成
			$this->_data['todouhukenMap'] = $this->_model->getTodofukenChizuData($this->_params);

			// 表示用データに変換
			$this->_model->convertData($this->_params,$this->_data);

			// BLOCKの生成
			$this->_main_helper = $this->_sikucyoson_chizu_helper;

			// 都道府県CDが50以上の場合、パンくずを生成しない
			if ($this->_params['PrefCd'][0] >= '50') {
				$this->_noMakeBreadcrumb = true;
			}

		// 地図物件一覧
    	}else if(array_key_exists("obiType",$this->_params)){
    		// 検索区分設定
			$this->_params["SrhKbn"] = Apm_Config_Search::SRHKBN_CHIZU;

			//グローバルナビ用セッションクリア
			Apm_Session_GlobalNavi::clear();
			// *セッション用パラメータを生成*
			$params = $this->_params;
			// 都道府県CD、市区町村CD、町CDを配列化
			if ($this->_model_common->checkvalue($params, "PrefCd") && !is_array($params['PrefCd'])) {
				$arrayCd = $params['PrefCd'];
				$params['PrefCd']   = array();
				$params['PrefCd'][] = $arrayCd;
			}
			for ($i=0; $i<count($params['PrefCd']); $i++) {
				// 50～53⇒01へ変更（北海道エリア用の特別コード）
				if ($params['PrefCd'][$i] >= '50' and $params['PrefCd'][$i] <= '53')
				{
					$params['PrefCd'][$i] = '01';
				}
			}
			if ($this->_model_common->checkvalue($params, "CityCd") && !is_array($params['CityCd'])) {
				$arrayCd = $params['CityCd'];
				$params['CityCd']   = array();
				$params['CityCd'][] = $arrayCd;
			}
			if ($this->_model_common->checkvalue($params, "TownCd") && !is_array($params['TownCd'])) {
				$arrayCd = $params['TownCd'];
				$params['TownCd']   = array();
				$params['TownCd'][] = $arrayCd;
			}
			// パラメータをセッションにセット
			Apm_Util_GlobalNavi_Common::setSessionParameters($params);

    		// ヘッダ・フッター非表示
			$this->_isInline = true;
    		//$this->setXPassThroutgh();

			// ソート定数設定
			$this->_data['sort_tinryo']		= "01";		// 賃料
			$this->_data['sort_tikunensu']	= "09";		// 築年数
			$this->_data['sort_menseki']	= "07";		// 専有面積
			$this->_data['sort_madori']		= "11";		// 間取り
			$this->_data['sort_tatemono']	= "13";		// 建物種別

    		// 外部モデル呼び出し設定
    		$loader = new Zend_Application_Module_Autoloader(array(
				'namespace' => 'Rstobi',
				'basePath' => APPLICATION_PATH . '/modules/rstobi',
			));

			// 物件一覧モデル生成
    		$this->_model_rstobi		= new Rstobi_Model_RstobiList();				// 一覧クラス
    		$this->_model_rstobi_sort	= new Rstobi_Model_Sort();						// ソートクラス
    		$this->_model_rstobi_pager	= new Rstobi_Model_Pager($this->pagerSetting);	// ペイジャークラス
    		$this->_model_converte		= new Rstobi_Model_Converte();					// コンバートクラス

			// ページャー用パラメータが足りない場合は、デフォルト設定取得
			if(!$this->_model_common->checkvalue($this->_params, "page") or
			   !$this->_model_common->checkvalue($this->_params, "dispCount"))
			{
				$PagerData = $this->_model_rstobi_pager->getDefaultPager(1,$this->pagerSetting['defaltDispCount']);
				$this->_params['page']      = $PagerData['page'];
				$this->_params['dispCount'] = $PagerData['dispCount'];
			}

    		// 並び替え情報取得
			$this->_data['dispSortData'] = $this->_model_rstobi_sort->getDispSortData($this->_params);
			$SortData = $this->_model_rstobi_sort->getSortData($this->_params);
			$this->_params['SORT_COLUMN'] = $SortData['SORT_COLUMN'];
			$this->_params['SORT_ORDER']  = $SortData['SORT_ORDER'];

			// 物件データ（一覧）の件数取得
			$buken_count = $this->_model_rstobi->getBukenDataForList($this->_params, Apm_Config_Search::GETBUKENTYPE_COUNT);

			// 検索結果件数を詰める
			$this->_data['all_count'] = $buken_count[0]['BUKEN_COUNT'];

			// 物件数が1件以上あった場合
			if ($this->_data['all_count'] > 0) {
				// ペイジャー用データを取得
				$this->_data['pager'] = $this->_model_rstobi_pager->getPagerData($buken_count[0]['BUKEN_COUNT'], $this->_params['page'], $this->_params['dispCount']);

				// 物件一覧取得
				$this->_data['buken_list'] = $this->_model_rstobi->getBukenDataForList($this->_params,Apm_Config_Search::GETBUKENTYPE_LIST,$this->_data['pager']['bukenCountFrom'],$this->_data['pager']['bukenCountTo']);

				// 表示用にデータをコンバート
				//$this->_data['buken_list'] = $this->_model_converte->dataConverteForBuken($this->_data['buken_list'], $this->_params);
				$this->_model_converte->dataConverteForBuken($this->_data['buken_list'], $this->_params);
				
				// パラメータ詰め直し
				$this->_data['params'] = &$this->_params;
			}

			// BLOCKの生成
			$this->_main_helper = $this->_rstobi_chizu_helper;

		// 地図
    	}else{
			// INSERT STRT 2012/01/17 地図検索における高CPU負荷SQL対応 ss-sakakibara
			//不正な緯度経度であれば、地図検索トップに遷移する
			//１．緯度経度が、数値でない。
			$redirectFlag = false;
			if( !is_numeric($this->_params["x"]) || !is_numeric($this->_params["y"])){
				$redirectFlag = true;
			}else{
				//２．日本の国土の範囲にない緯度経度である。
				$ido = floatval($this->_params["y"]);
				$keido = floatval($this->_params["x"]);
				if( $keido < 122.0 ||  155.0 < $keido ||  $ido < 20.0 || 46.0 < $ido ){
					$redirectFlag = true;
				}
			}
			if($redirectFlag){
				Apm_Util::redirect('/search/chizusearch/' );
			}
			// INSERT END 2012/01/17 地図検索における高CPU負荷SQL対応 ss-sakakibara

			if ($this->_newTemplate) {
				$disp_tpl = APPLICATION_PATH . '/modules/search/views/scripts/chizusearch_new.tpl';
				$this->_data['block_title'] = '*地図から探す';
				$this->addMetaCss('/css/search/searchmap.css',array('type' => 'text/css','media' => 'all'));
				$this->addMetaJs('/app/js/search/Chizusearch.js');
			} else {
				// H1のタイトル
				$this->_data['h1_title'] = '地図から探す';
			}
			// PrefCd,CityCdが存在しない場合、緯度・経度から取得
			if (!$this->_model_common->checkvalue($this->_params, "PrefCd") || !$this->_model_common->checkvalue($this->_params, "CityCd")) {
				$this->_model = new Search_Model_Selchizutodofuken();
				$CityCd = $this->_model->getCityCdFromLocation($this->_params);				
				if (!empty($CityCd)) {
					$this->_params['PrefCd'][0] = $CityCd['PREF_CD'];
					$this->_params['CityCd'][0] = $CityCd['CITY_CD'];
				}
			}
			
    		$this->_data['params'] = $this->_params;

			//グローバルナビ用セッションクリア
			//Apm_Session_GlobalNavi::clear();
			// パラメータをセッションにセット
			//Apm_Util_GlobalNavi_Common::setSessionParameters($this->_params);

			// 都道府県CDの配列を排除
			if(is_array($this->_data['params']['PrefCd'])){
				$PrefCd = &$this->_data['params']['PrefCd'][0];
			}else{
				$PrefCd = &$this->_data['params']['PrefCd'];
			}
			
			// 市区町村CDの配列を排除
			if(is_array($this->_data['params']['CityCd'])){
				$CityCd = &$this->_data['params']['CityCd'][0];
			}else{
				$CityCd = &$this->_data['params']['CityCd'];
			}
			// 地図表示時には、左ペイン表示
			$this->_disabledLeftPanel = false;

			// 埼玉県バナー表示
			if ($PrefCd == '11') {
				$this->_data['pref_11_banner'] = 'on';
			}

			// *地図へ送るパラメータ生成*
			$params = $this->_params;
			// パラメータ加工
			$params['SrhKbn'] = Apm_Config_Search::SRHKBN_CHIZU;
			unset($params['AreaCd']);
			unset($params['AreaName']);
			unset($params['SiteitosiCd']);
			unset($params['SiteitosiName']);
			unset($params['prefcd_condition']);
			$params['PrefCd'] = $PrefCd;
			unset($params['CityCd']);
			if (!isset($params['OemCd'])) {	// OEMコードは無いとエラーになる
				$params['OemCd'] = "";
			}
			if (isset($params['scale'])) {
				$params['MapScl'] = $params['scale'];
				unset($params['scale']);
			}
			// パラメータをURL化
			$model_bread = new Search_Model_Breadcrumb($this->_breadcrumb);
			$params_str  = $model_bread->generateUrlParameter($params);
			// 地図URL
			$this->_data['map_url'] = Apm_Config_Search::URL_MAP_SERVER;
			$this->_data['map_param'] = $params_str .
										"&baseurl=" . $this->_config["apm"]["baseurl"] .
										"&domain=" . $_SERVER["SERVER_NAME"];			
/*
			$this->_data['map_param'] = "?x=" . $this->_params["x"] .
										"&y=" . $this->_params["y"] .
										"&SrhKbn=" . Apm_Config_Search::SRHKBN_CHIZU .
										"&PrefCd=" . $PrefCd .
										//"&UseKbn=" . $this->_params["UseKbn"] .
										"&OemCd=" . $this->_params["OemCd"] .
										"&MapScl=" . $this->_params["scale"] .
										"&baseurl=" . $this->_config["apm"]["baseurl"] .
										"&domain=" . $_SERVER["SERVER_NAME"];
*/
			// 家賃相場URL
			$this->_data['yachinsoba_url'] = $this->_config['apm']['baseurl'] . 'search/yachinsoubasearch/detail/';
			$this->_data['yachinsoba_param'] = "?SrhType=1&PrefCd[]=" . $PrefCd . "&CityCd[]=" . $CityCd;

			// BLOCKの生成
			$this->_main_helper = $this->_chizu_helper;

			// BLOCKの生成
			$this->_data['chizu_script'] = "<script>onloadFunction('".$this->_data['map_url'].
																	"?OemCd=".$this->_params["OemCd"].
																	"&baseurl=".$this->_config["apm"]["baseurl"].
																	"&domain=".$_SERVER["SERVER_NAME"].
																"');</script>";
		}
		// テンプレート設定
		if(array_key_exists('all_count',$this->_data)){
			// 物件一覧用テンプレート
			$disp_tpl = APPLICATION_PATH . '/modules/search/views/scripts/rstobichizu.tpl';
		}else if(array_key_exists("OemCd", $this->_params) && $this->_params["OemCd"] != ""){
			// ヘッダ・フッター非表示
    		$this->setXPassThroutgh();
			// OEMの場合、家賃相場を表示しない
			$this->_data['OemDisplay'] = "style='display:none;'";
			$disp_tpl = APPLICATION_PATH . '/modules/search/views/scripts/chizusearch_nohead.tpl';
		}else{
			// メインテンプレート
			if ($this->_newTemplate) {
				// 前方で指定済み
				//$disp_tpl = APPLICATION_PATH . '/modules/search/views/scripts/search_new.tpl';
			} else {
				$disp_tpl = APPLICATION_PATH . '/modules/search/views/scripts/chizusearch.tpl';
			}
		}

		// 表示
		$this->_display_path = $disp_tpl;
	}
}
?>
